#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__
#include <pthread.h>
//子缓冲区
typedef struct
{
    unsigned char *ptr;//缓冲区指针
    int tatol_size;//缓冲区大小
    int len;//数据长度
}subBuffer;
//双缓冲区
typedef struct
{
    subBuffer *sub_buffers[2];//包含两个小缓冲区指针的数组
    int read_index;//读索引
    int write_index;//写索引
    //读锁
    pthread_mutex_t read_mutex;
    //写锁
    pthread_mutex_t write_mutex;

}Buffer;

/// @brief 创建并初始化缓冲区
/// @param tatol_size 子缓存区大小
/// @return 双缓冲区指针
Buffer *app_buffer_init(int tatol_size);

/// @brief 释放缓冲区
/// @param buf 
void app_buffer_free(Buffer *buf);

/// @brief 向缓冲区写入数据
/// @param buf 目标缓冲区
/// @param data 写入的数据
/// @param len 写入入的数据长度
/// @return 0:成功，-1:失败
int app_buffer_write(Buffer *buf, char *data, int data_len);

/// @brief 从缓冲区读取数据
/// @param buf 源缓冲区
/// @param data_buf 读取数据存放的缓冲区
/// @param buf_size 读取数据存放的缓冲区大小
/// @return 读取的数据长度
int app_buffer_read(Buffer *buf, char *data_buf, int buf_size);
#endif /* __APP_BUFFER_H__ */
